################# LOAD PACKAGES
library(rstan)
library(rethinking)
library(parallel)
library(binom)

################# LOAD DATA

dataset <- read.csv("Data__current_study.csv")

#################



######### Model DV / Outcome Variable
#
# punished_1yes			# 1 = Participant punished Third Party
#				# 0 = Participant DID NOT punished Third Party
# 
######### Model Parameters
#
# CONDITION_altruistic_1yes	# Dummy parameter for Third Party Behavior:
#				# 1 = Third Party was selfish during this trial (altruistic punishment condition)
#				# 0 = Third Party was prosocial during this trial (antisocial punishment condition)
#
# aid				# ID code for participant
# fieldid			# ID code for field site
# age_c				# Child's age in years, centered
# CONDITION_1_1yes		# Dummy parameter for Punish-Selfish condition
# CONDITION_2_1yes		# Dummy parameter for Punish-Prosocial condition
#
######### Other Parameters (in dataset but not included models)
#
# CONDITION_3_1yes		# Dummy parameter for Punish-Either condition (this is the reference level for the models including CONDITION_1_1yes and CONDITION_2_1yes
# FIELDSITE			# Name of field site
# Age_in_years			# Child's age in years, raw value
# GENDER_1female		# Child's gender
#
#########



######### Compare Models by WAIC

compare(Model_1, Model_2, Model_3, Model_4, Model_5)

compare(Model_1, Model_2, Model_3, Model_4, Model_5, Model_6)

save(Model_1, Model_2, Model_3, Model_4, Model_5, Model_6, file = "Models_children_adults.RData")

#########


######### Model Code

Model_1 <- map2stan(
alist(
    punished_1yes ~ dbinom( 1 , p ),
    logit(p) <- Intercept +
        b_CONDITION_altruistic_1yes*CONDITION_altruistic_1yes +
        v_Intercept[aid],
    Intercept ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes ~ dnorm(0,1),
    v_Intercept[aid] ~ dnorm(0,sigma_aid),
    sigma_aid ~ dcauchy(0,2)
), data= dataset, warmup=3000 , iter=15000 , chains=3 , cores=3 )



Model_2 <- map2stan(
alist(
    punished_1yes ~ dbinom( 1 , p ),
    logit(p) <- Intercept +
        b_CONDITION_altruistic_1yes*CONDITION_altruistic_1yes +
        b_age_c*age_c +
        b_CONDITION_altruistic_1yes_X_age_c*CONDITION_altruistic_1yes*age_c +
        v_Intercept[aid],
    Intercept ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes ~ dnorm(0,1),
    b_age_c ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_age_c ~ dnorm(0,1),
    v_Intercept[aid] ~ dnorm(0,sigma_aid),
    sigma_aid ~ dcauchy(0,2)
), data= dataset, warmup=3000 , iter=15000 , chains=3 , cores=3 )



Model_3 <- map2stan(
alist(
    punished_1yes ~ dbinom( 1 , p ),
    logit(p) <- Intercept +
        b_CONDITION_altruistic_1yes*CONDITION_altruistic_1yes +
        b_CONDITION_1_1yes*CONDITION_1_1yes +
        b_CONDITION_2_1yes*CONDITION_2_1yes +
        b_CONDITION_altruistic_1yes_X_CONDITION_1_1yes*CONDITION_altruistic_1yes*CONDITION_1_1yes +
        b_CONDITION_altruistic_1yes_X_CONDITION_2_1yes*CONDITION_altruistic_1yes*CONDITION_2_1yes +
        v_Intercept[aid],
    Intercept ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes ~ dnorm(0,1),
    b_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_2_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_CONDITION_2_1yes ~ dnorm(0,1),
    v_Intercept[aid] ~ dnorm(0,sigma_aid),
    sigma_aid ~ dcauchy(0,2)
), data= dataset, warmup=3000 , iter=15000 , chains=3 , cores=3 )



Model_4 <- map2stan(
alist(
    punished_1yes ~ dbinom( 1 , p ),
    logit(p) <- Intercept +
        b_CONDITION_altruistic_1yes*CONDITION_altruistic_1yes +
        b_age_c*age_c +
        b_CONDITION_1_1yes*CONDITION_1_1yes +
        b_CONDITION_2_1yes*CONDITION_2_1yes +
        b_CONDITION_altruistic_1yes_X_age_c*CONDITION_altruistic_1yes*age_c +
        b_CONDITION_altruistic_1yes_X_CONDITION_1_1yes*CONDITION_altruistic_1yes*CONDITION_1_1yes +
        b_CONDITION_altruistic_1yes_X_CONDITION_2_1yes*CONDITION_altruistic_1yes*CONDITION_2_1yes +
        b_age_c_X_CONDITION_1_1yes*age_c*CONDITION_1_1yes +
        b_age_c_X_CONDITION_2_1yes*age_c*CONDITION_2_1yes +
        b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_1_1yes*CONDITION_altruistic_1yes*age_c*CONDITION_1_1yes +
        b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_2_1yes*CONDITION_altruistic_1yes*age_c*CONDITION_2_1yes +
        v_Intercept[aid],
    Intercept ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes ~ dnorm(0,1),
    b_age_c ~ dnorm(0,1),
    b_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_2_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_age_c ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_CONDITION_2_1yes ~ dnorm(0,1),
    b_age_c_X_CONDITION_1_1yes ~ dnorm(0,1),
    b_age_c_X_CONDITION_2_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_2_1yes ~ dnorm(0,1),
    v_Intercept[aid] ~ dnorm(0,sigma_aid),
    sigma_aid ~ dcauchy(0,2)
), data= dataset, warmup=3000 , iter=15000 , chains=3 , cores=3 )



Model_5 <- map2stan(
alist(
    punished_1yes ~ dbinom( 1 , p ),
    logit(p) <- Intercept +
        b_CONDITION_altruistic_1yes*CONDITION_altruistic_1yes +
        b_age_c*age_c +
        b_CONDITION_1_1yes*CONDITION_1_1yes +
        b_CONDITION_2_1yes*CONDITION_2_1yes +
        b_CONDITION_altruistic_1yes_X_age_c*CONDITION_altruistic_1yes*age_c +
        b_CONDITION_altruistic_1yes_X_CONDITION_1_1yes*CONDITION_altruistic_1yes*CONDITION_1_1yes +
        b_CONDITION_altruistic_1yes_X_CONDITION_2_1yes*CONDITION_altruistic_1yes*CONDITION_2_1yes +
        b_age_c_X_CONDITION_1_1yes*age_c*CONDITION_1_1yes +
        b_age_c_X_CONDITION_2_1yes*age_c*CONDITION_2_1yes +
        b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_1_1yes*CONDITION_altruistic_1yes*age_c*CONDITION_1_1yes +
        b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_2_1yes*CONDITION_altruistic_1yes*age_c*CONDITION_2_1yes +
        v_aid_Intercept[aid] +
        v_fieldid_Intercept[fieldid] +
        v_fieldid_CONDITION_altruistic_1yes[fieldid]*CONDITION_altruistic_1yes +
        v_fieldid_age_c[fieldid]*age_c +
        v_fieldid_CONDITION_1_1yes[fieldid]*CONDITION_1_1yes +
        v_fieldid_CONDITION_2_1yes[fieldid]*CONDITION_2_1yes +
        v_fieldid_CONDITION_altruistic_1yes_X_age_c[fieldid]*CONDITION_altruistic_1yes*age_c +
        v_fieldid_CONDITION_altruistic_1yes_X_CONDITION_1_1yes[fieldid]*CONDITION_altruistic_1yes*CONDITION_1_1yes +
        v_fieldid_CONDITION_altruistic_1yes_X_CONDITION_2_1yes[fieldid]*CONDITION_altruistic_1yes*CONDITION_2_1yes +
        v_fieldid_age_c_X_CONDITION_1_1yes[fieldid]*age_c*CONDITION_1_1yes +
        v_fieldid_age_c_X_CONDITION_2_1yes[fieldid]*age_c*CONDITION_2_1yes +
        v_fieldid_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_1_1yes[fieldid]*CONDITION_altruistic_1yes*age_c*CONDITION_1_1yes +
        v_fieldid_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_2_1yes[fieldid]*CONDITION_altruistic_1yes*age_c*CONDITION_2_1yes,
    Intercept ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes ~ dnorm(0,1),
    b_age_c ~ dnorm(0,1),
    b_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_2_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_age_c ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_CONDITION_2_1yes ~ dnorm(0,1),
    b_age_c_X_CONDITION_1_1yes ~ dnorm(0,1),
    b_age_c_X_CONDITION_2_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_1_1yes ~ dnorm(0,1),
    b_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_2_1yes ~ dnorm(0,1),
    v_aid_Intercept[aid] ~ dnorm(0,sigma_aid),
    sigma_aid ~ dcauchy(0,2),
    c(v_fieldid_Intercept,v_fieldid_CONDITION_altruistic_1yes,v_fieldid_age_c,v_fieldid_CONDITION_1_1yes,v_fieldid_CONDITION_2_1yes,v_fieldid_CONDITION_altruistic_1yes_X_age_c,v_fieldid_CONDITION_altruistic_1yes_X_CONDITION_1_1yes,v_fieldid_CONDITION_altruistic_1yes_X_CONDITION_2_1yes,v_fieldid_age_c_X_CONDITION_1_1yes,v_fieldid_age_c_X_CONDITION_2_1yes,v_fieldid_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_1_1yes,v_fieldid_CONDITION_altruistic_1yes_X_age_c_X_CONDITION_2_1yes)[fieldid] ~ dmvnorm2(0,sigma_fieldid,Rho_fieldid),
    sigma_fieldid ~ dcauchy(0,2),
    Rho_fieldid ~ dlkjcorr(2)
), data= dataset, warmup=3000 , iter=15000 , chains=3 , cores=3 )

